// 从zustand库中导入create函数
import { create } from 'zustand';
// 从zustand的中间件库中导入persist函数
import { persist } from 'zustand/middleware';

// 定义UserState接口，用于描述用户状态
interface UserState {
  // 用户是否已登录
  isLoggedIn: boolean;
  // 用户的访问令牌，用于访问受保护的API
  accessToken: string | null;
  // 用户的刷新令牌，用于获取新的访问令牌
  refreshToken: string | null;
  // 用户的信息，包括手机号等
  userInfo: {
    phone: string;
    // 其他用户信息字段
  } | null;
  // 设置访问令牌和刷新令牌的方法
  setTokens: (accessToken: string, refreshToken: string) => void;
  // 设置用户信息的方法
  setUserInfo: (userInfo: UserState['userInfo']) => void;
  // 用户登出的方法，重置相关状态
  logout: () => void;
}

// 创建并导出用户状态的store
// 使用persist中间件持久化状态，以便在页面刷新后仍能保留
export const useUserStore = create<UserState>()(
  persist(
    (set) => ({

      // 初始状态下，用户未登录，相关令牌和信息为空
      isLoggedIn: false,
      accessToken: null,
      refreshToken: null,
      userInfo: null,

      // 设置访问令牌和刷新令牌的方法
      setTokens: (accessToken, refreshToken) =>
        set({ accessToken, refreshToken, isLoggedIn: true }),

      // 设置用户信息的方法
      setUserInfo: (userInfo) => set({ userInfo }),

      // 用户登出的方法，重置相关状态
      logout: () =>
        set({
          isLoggedIn: false,
          accessToken: null,
          refreshToken: null,
          userInfo: null,
        }),
    }),
    {
      // 持久化存储的名称
      name: 'user-storage',
    }
  )
);